package com.fx.ruankao.service;

import com.fx.ruankao.entity.ExamRecord;
import java.util.List;

/**
 * 考试记录服务接口
 */
public interface ExamRecordService {
    
    /**
     * 新增考试记录
     * @param examRecord 考试记录实体
     * @return 受影响的行数
     */
    int insert(ExamRecord examRecord);
    
    /**
     * 根据ID删除考试记录
     * @param id 考试记录ID
     * @return 受影响的行数
     */
    int deleteById(Long id);
    
    /**
     * 更新考试记录
     * @param examRecord 考试记录实体
     * @return 受影响的行数
     */
    int update(ExamRecord examRecord);
    
    /**
     * 根据ID查询考试记录
     * @param id 考试记录ID
     * @return 考试记录实体
     */
    ExamRecord selectById(Long id);
    
    /**
     * 根据用户ID查询考试记录
     * @param userId 用户ID
     * @return 考试记录列表
     */
    List<ExamRecord> selectByUserId(Long userId);
    
    /**
     * 根据试卷ID查询考试记录
     * @param paperId 试卷ID
     * @return 考试记录列表
     */
    List<ExamRecord> selectByPaperId(Long paperId);
    
    /**
     * 根据用户ID和试卷ID查询考试记录
     * @param userId 用户ID
     * @param paperId 试卷ID
     * @return 考试记录实体
     */
    ExamRecord selectByUserIdAndPaperId(Long userId, Long paperId);
    
    /**
     * 批量删除考试记录
     * @param ids 考试记录ID数组
     * @return 受影响的行数
     */
    int batchDelete(Long[] ids);
    
    /**
     * 更新考试成绩
     * @param recordId 考试记录ID
     * @param score 成绩
     * @return 是否更新成功
     */
    boolean updateScore(Long recordId, Integer score);
    
    /**
     * 更新考试状态
     * @param recordId 考试记录ID
     * @param status 状态
     * @return 是否更新成功
     */
    boolean updateStatus(Long recordId, Integer status);
    
    /**
     * 查询考试记录数量
     * @return 考试记录数量
     */
    int countRecords();
    
    /**
     * 根据条件统计考试记录数量
     * @param userId 用户ID（可选）
     * @param paperId 试卷ID（可选）
     * @param status 状态（可选）
     * @return 考试记录数量
     */
    int countRecordsByCondition(Long userId, Long paperId, Integer status);
}